home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 11
/
FM Towns Free Software Collection 11.iso
/
t_os
/
tool
/
jyusho
/
jyusho.bas
< prev
next >
Wrap
BASIC Source File
|
1995-08-14
|
29KB
|
645 lines
10 '******************************************************************
20 '* *
30 '* 簡易データベースシステム 「和」~カズ~ *
40 '* 簡易住所録 じゅうしょろくん *
50 '* *
60 '* BY NISHINA KAZUNARI *
70 '* *
80 '******************************************************************
90 ON ERROR GOTO *ERROR_RT
100 MOUSE 0:SCREEN@0:CLS:COLOR 7:SV=0:OS=0:LINE(0,0)-(639,479),PSET,7,BF
110 SYMBOL(220,200),"ファイル読み込み中・・・",1,1,0
120 SYMBOL(220,230),"しばらくお待ち下さい",1,1,0
130 OPEN "I",#1,"jyusho.cfg"
140 LINE INPUT #1,FL$ '---------- データのファイル名
150 INPUT #1,DK '---------- データの件数
160 INPUT #1,ITEM '---------- 登録する項目の数
170 CLOSE #1
180 DIM NE$(ITEM,DK+1),W$(ITEM),WS(DK),SND%(10000):OPN=0
190 IF OPN=0 THEN
200 OPEN "I",#1,FL$:INPUT#1,DS
210 IF DS>DK THEN
220 SYMBOL(180,280),"警告:データの設定件数が足りないため",1,1,2:BEEP
230 SYMBOL(180,310)," 表示されないデータがあります。",1,1,2
240 DS=DK:WAIT 600
250 ENDIF
260 IF DS>0 THEN
270 FOR I=0 TO DS-1:FOR J=0 TO ITEM:INPUT#1,NE$(J,I):NEXT J,I
280 ENDIF
290 CLOSE #1
300 ELSE
310 OPEN "O",#1,FL$:PRINT #1,0:CLOSE#1
320 ENDIF
330 GOSUB *タイトル
340 'メインループ+++++++++++++++++++++++++++++++++++++++++++
350 *メイン:MOUSE 1,320,240,1
360 FLG=0:WHILE FLG=0
370 IF MOUSE(0)>=200 AND MOUSE(0)<=439 THEN
380 IF MOUSE(1)>=150 AND MOUSE(1)<=180 AND MOUSE(2,0)<>0 THEN
390 IF DS<DK THEN GOSUB *入 ELSE GOSUB *OVER:GOSUB *タイトル
400 ENDIF
410 IF MOUSE(1)>=200 AND MOUSE(1)<=230 AND MOUSE(2,0)<>0 THEN
420 GOSUB *整:GOSUB *タイトル
430 ENDIF
440 IF MOUSE(1)>=250 AND MOUSE(1)<=280 AND MOUSE(2,0)<>0 THEN GOSUB *出
450 IF MOUSE(1)>=300 AND MOUSE(1)<=330 AND MOUSE(2,0)<>0 THEN
460 GOSUB *更新:GOSUB *タイトル
470 ENDIF
480 IF MOUSE(1)>=350 AND MOUSE(1)<=380 AND MOUSE(2,0)<>0 THEN FLG=1
490 ENDIF
500 WEND:FLG=0
510 IF SV=1 THEN
520 GOSUB *画面に線:GOSUB *MOUSEON:LINE(100,100)-(539,379),PSET,0,BF,7
530 RESTORE *保存しますか
540 FOR M=0 TO 2:READ A$:SYMBOL(150,145+M*30),A$,1,1,0:NEXT
550 GOSUB *正否判定:IF KAKU=0 THEN GOSUB *更新
560 ENDIF
570 IF INKEY$="" THEN
580 GOSUB *画面に線:LINE(180,200)-(459,279),PSET,0,BF,7
590 SYMBOL(260,230),"終了しました。",1,1,0
600 GOSUB *MOUSEON:GOSUB *確認
610 ELSE
620 CLS:GOSUB *MOUSEOFF:RESTORE *STRL:READ A$:LS=1
630 WHILE A$<>"e":SYMBOL(250,460),A$,1,1,7:IF MOUSE(2,0)<>0 THEN LS=LS+1
640 FOR J=0 TO 40/LS:ROLL -LS:WAIT 1:NEXT:READ A$:WEND:WAIT 300
650 ENDIF
660 MOUSE 5:END
670 *保存しますか:DATA データが保存されていません。
680 DATA このままでは更新したデータが消滅します。
690 DATA データを保存しますか?,しない,する
700 *STRL:DATA " Staff",,," produced by",Nishina Kazunari,
710 DATA " design by",Nishina Kazunari,," program by"
720 DATA Nishina Kazunari,," voice by"," Nishina Akiko",,,,,,,
730 DATA " presented by",," NintonSoft",,,,"e"
740 '素晴らしきサブルーチン群----------------------------------
750 *OVER:GOSUB *画面に線:LINE(200,190)-(439,289),PSET,0,BF,7:BEEP
760 SYMBOL(220,200)," 件数不足です",1,1,2
770 SYMBOL(210,230),"データを追加したい場合は、",1,1,0
780 SYMBOL(210,260),"コンフィグファイルを書換えて下さい。",1,1,0
790 GOSUB *MOUSEON:GOSUB *確認:RETURN
800 *MOUSEOFF:MX=MOUSE(0):MY=MOUSE(1):MOUSE 1,MX,MY,0:RETURN
810 *MOUSEON:MOUSE 1,MX,MY,1:RETURN
820 '影を付けるルーチン++++++++++++++++++++++++++++++++++++
830 *影付:IF XY=0 THEN XYY=IK*Y3:XXY=0 ELSE XYY=0:XXY=IK*Y3
840 '光==============================================
850 LINE(X1+1+XXY,Y1+1+XYY)-(X2-1+XXY,Y1+3+XYY),PSET,7,BF
860 LINE(X1+1+XXY,Y1+1+XYY)-(X1+3+XXY,Y2-1+XYY),PSET,7,BF
870 '影==============================================
880 LINE(X1+3+XXY,Y2-3+XYY)-(X2-1+XXY,Y2-1+XYY),PSET,0,BF
890 LINE(X1+2+XXY,Y2-2+XYY)-(X2-1+XXY,Y2-1+XYY),PSET,0,BF
900 LINE(X1+1+XXY,Y2-1+XYY)-(X2-1+XXY,Y2-1+XYY),PSET,0,BF
910 LINE(X2-1+XXY,Y1+1+XYY)-(X2-1+XXY,Y2-1+XYY),PSET,0,BF
920 LINE(X2-2+XXY,Y1+2+XYY)-(X2-1+XXY,Y2-1+XYY),PSET,0,BF
930 LINE(X2-3+XXY,Y1+3+XYY)-(X2-1+XXY,Y2-1+XYY),PSET,0,BF
940 RETURN
950 'メイン画面描写ルーチン+++++++++++++++++++++++++++++++++
960 *タイトル:CLS:LINE(0,0)-(639,479),PSET,7,BF:RESTORE *DATA1
970 CIRCLE(280,280),270,2,.7!,,,F,XOR:CIRCLE(360,280),270,3,.7!,,,F,XOR
980 X1=200:X2=439:Y1=150:Y2=180:Y3=50:XY=0
990 LINE(20,50)-(619,100),PSET,5,BF:FOR I=0 TO 2
1000 READ X,Y,C,S,K,A$:SYMBOL(X,Y),A$,S,S,C,,,K,5:NEXT:FOR I=0 TO 4
1010 IK=I:LINE(X1,Y1+I*Y3)-(X2,Y2+I*Y3),PSET,0,BF,4:GOSUB *影付
1020 READ A$:SYMBOL(X1+65,Y1+7+I*Y3),A$,1,1,0,,,,5
1030 NEXT:SYMBOL(210,420),"マウスでクリックして下さい。",1,1,0
1040 N1$=MID$(DATE$,1,2):N2$=MID$(DATE$,4,2):N3$=MID$(DATE$,7,2)
1050 IF MID$(DATE$,4,1)="0" THEN N2$=MID$(DATE$,5,1)
1060 IF MID$(DATE$,7,1)="0" THEN N3$=MID$(DATE$,8,1)
1070 SYMBOL(30,440),N1$+"年"+N2$+"月"+N3$+"日",1,1,2,,,5,2
1080 SYMBOL(480,450),"1995 (C)NINTON SOFT",1,1,6,,,9:RETURN
1090 *DATA1:DATA 20,10,3,2,15,簡易住所録,120,60,6,3,8
1100 DATA じゅうしょろくん,460,130,2,2,15,ver 1.0
1110 DATA 入力モード,整列モード,検索モード,データ保存," 終了"
1120 '入力モード++++++++++++++++++++++++++++++++++++++++++++++++
1130 *入:MD=0:WDS=DS:T$="個人登録モード"
1140 GOSUB *登更:GOSUB *タイトル:RETURN
1150 '登録OR更新用ルーチン++++++++++++++++++++++++++++++++++++++
1160 *登更画面:RESTORE *DATA2:LINE(0,0)-(639,454),PSET,7,BF
1170 LINE(0,455)-(639,479),PSET,0,BF
1180 LINE(60,20)-(579,40),PSET,6,BF:SYMBOL(130,10),T$,2,2,2,,,15,20
1190 X1=150:X2=250:Y1=430:Y2=450:Y3=350:XY=1:FOR U=0 TO 1:IK=U
1200 LINE(X1+U*Y3,Y1)-(X2+U*Y3,Y2),PSET,0,BF,1+U:GOSUB *影付
1210 READ A$:SYMBOL(160+U*375,433),A$,1,1,7,,,9,4:NEXT
1220 FOR U=0 TO ITEM
1230 LINE(45,75+U*20)-(150,95+U*20),PSET,0,BF,4
1240 READ A$:SYMBOL(50,77+U*20),A$,1,1,0,,,1
1250 LINE(150,75+U*20)-(600,95+U*20),PSET,0,BF,5
1260 SYMBOL(155,78+U*20),NE$(U,WDS),1,1,0
1270 NEXT:FOR U=0 TO 8:READ A$:SYMBOL(150,250+U*16),A$,1,1,0:NEXT
1280 RETURN
1290 *登更:FOR J=0 TO ITEM:W$(J)=NE$(J,WDS):NEXT:FLG9=0
1300 GOSUB *登更画面:FLG2=0:WHILE FLG2=0
1310 IF DS>=DK THEN GOSUB *OVER:FLG2=1
1320 IF MOUSE(1)>=430 AND MOUSE(1)<=450 THEN
1330 IF MOUSE(0)>=150 AND MOUSE(0)<=250 AND MOUSE(2,0)<>0 THEN
1340 FLG2=1:FOR J=0 TO ITEM:NE$(J,WDS)=W$(J):NEXT
1350 ENDIF
1360 IF MOUSE(0)>=500 AND MOUSE(0)<=600 AND MOUSE(2,0)<>0 THEN
1370 FLG3=0:FOR L=0 TO ITEM:IF NE$(L,WDS)=W$(L) THEN FLG3=FLG3+1
1380 NEXT
1390 IF MD=0 AND DS>0 THEN
1400 GOHI=0:FOR O=0 TO DS-1
1410 IF NE$(1,O)+NE$(3,O)=NE$(1,WDS)+NE$(3,WDS) AND GOHI=0 THEN
1420 GOSUB *正か否か:GOHI=1:IF KAKU=1 THEN FLG9=1 ELSE GOSUB *登更画面
1430 ENDIF
1440 NEXT
1450 ENDIF
1460 IF FLG9=0 THEN
1470 IF FLG3<=ITEM THEN
1480 GOSUB *MOUSEOFF:SV=1
1490 IF MD=0 THEN DS=DS+1:WDS=WDS+1
1500 GOSUB *MOUSEON:IF MD=0 THEN GOSUB *登更画面 ELSE FLG2=1
1510 ELSE
1520 FLG2=1
1530 ENDIF
1540 ENDIF
1550 ENDIF
1560 ENDIF
1570 GOSUB *キーボード入力:FLG9=0
1580 WEND:FLG2=0:RETURN
1590 'ソート+++++++++++++++++++++++++++++++++++++++++++++++++++++++
1600 *整画面:LINE(0,0)-(639,479),PSET,7,BF:RESTORE *SORTDATA
1610 LINE(50,30)-(589,50),PSET,3,BF:READ A$:SYMBOL(200,20),A$,2,2,6,,,9,3
1620 X1=200:X2=439:Y1=150:Y2=180:Y3=50:XY=0:FOR J=0 TO 4:IK=J
1630 LINE(X1,Y1+J*Y3)-(X2,Y2+J*Y3),PSET,0,BF,5:GOSUB *影付
1640 READ A$:SYMBOL(270,158+J*Y3),A$,1,1,0:NEXT
1650 SYMBOL(200,400),"整列方法を選んで下さい。",1,1,0:RETURN
1660 *整:GOSUB *整画面:SORTFLG=0:SMODE=0:WHILE SORTFLG=0
1670 IF MOUSE(0)>=200 AND MOUSE(0)<=439 THEN
1680 IF MOUSE(2,0)<>0 AND MOUSE(1)>=150 AND MOUSE(1)<=180 THEN
1690 SMODE=0:GOSUB *整列:SV=1:GOSUB *整画面
1700 ENDIF
1710 IF MOUSE(2,0)<>0 AND MOUSE(1)>=200 AND MOUSE(1)<=230 THEN
1720 SMODE=1:GOSUB *整列:SV=1:GOSUB *整画面
1730 ENDIF
1740 IF MOUSE(2,0)<>0 AND MOUSE(1)>=250 AND MOUSE(1)<=280 THEN
1750 SMODE=2:GOSUB *整列:SV=1:GOSUB *整画面
1760 ENDIF
1770 IF MOUSE(2,0)<>0 AND MOUSE(1)>=300 AND MOUSE(1)<=330 THEN
1780 SMODE=3:GOSUB *整列:SV=1:GOSUB *整画面
1790 ENDIF
1800 IF MOUSE(1)>=350 AND MOUSE(1)<=380 AND MOUSE(2,0)<>0 THEN SORTFLG=1
1810 ENDIF
1820 WEND:RETURN
1830 *整列:GOSUB *MOUSEOFF:GOSUB *画面に線
1840 LINE(180,200)-(459,279),PSET,0,BF,7
1850 SYMBOL(190,210),"整列中です、しばらくお待ち下さい。",1,1,0
1860 SYMBOL(250,250),"データシフト中",1,1,3
1870 FOR J=DS TO 1 STEP -1:FOR JJ=0 TO ITEM
1880 NE$(JJ,J)=NE$(JJ,J-1):NEXT JJ,J
1890 LINE(250,250)-(400,270),PSET,7,BF:SYMBOL(250,250),"残り",1,1,1
1900 FOR SO0=1 TO DS:LINE(300,250)-(400,270),PSET,7,BF
1910 SYMBOL(300,250),STR$(DS-SO0+1),1,1,0
1920 FOR J=0 TO ITEM:NE$(J,0)=NE$(J,SO0):NEXT:SO1=SO0
1930 IF SMODE=0 THEN
1940 WHILE NE$(0,SO1)+"0"+NE$(2,SO1)<NE$(0,SO1-1)+"0"+NE$(2,SO1-1)
1950 FOR J=0 TO ITEM:SWAP NE$(J,SO1),NE$(J,SO1-1):NEXT J:SO1=SO1-1
1960 WEND
1970 ENDIF
1980 IF SMODE=1 THEN
1990 WHILE NE$(0,SO1)+"0"+NE$(2,SO1)>NE$(0,SO1-1)+"0"+NE$(2,SO1-1)
2000 FOR J=0 TO ITEM:SWAP NE$(J,SO1),NE$(J,SO1-1):NEXT J:SO1=SO1-1
2010 WEND
2020 ENDIF
2030 IF SMODE=2 THEN
2040 WHILE NE$(2,SO1)+"0"+NE$(0,SO1)<NE$(2,SO1-1)+"0"+NE$(0,SO1-1)
2050 FOR J=0 TO ITEM:SWAP NE$(J,SO1),NE$(J,SO1-1):NEXT J:SO1=SO1-1
2060 WEND
2070 ENDIF
2080 IF SMODE=3 THEN
2090 WHILE NE$(2,SO1)+"0"+NE$(0,SO1)>NE$(2,SO1-1)+"0"+NE$(0,SO1-1)
2100 FOR J=0 TO ITEM:SWAP NE$(J,SO1),NE$(J,SO1-1):NEXT J:SO1=SO1-1
2110 WEND
2120 ENDIF
2130 NEXT SO0:LINE(250,250)-(400,270),PSET,7,BF
2140 SYMBOL(250,250),"データシフト中",1,1,3
2150 FOR J=0 TO DS:FOR JJ=0 TO ITEM
2160 NE$(JJ,J)=NE$(JJ,J+1):NEXT JJ,J:GOSUB *MOUSEON:RETURN
2170 *SORTDATA:DATA 整列モード選択,名字の昇順,名字の降順,名前の昇順
2180 DATA 名前の降順," 戻る"
2190 'データ更新ルーチン++++++++++++++++++++++++++++++++++++++++++++
2200 *更新:GOSUB *MOUSEOFF:GOSUB *画面に線:SV=0
2210 LINE(180,200)-(459,279),PSET,0,BF,7
2220 SYMBOL(190,230),"保存中です、しばらくお待ち下さい。",1,1,0
2230 KILL FL$:OPEN "O",#1,FL$:PRINT#1,DS
2240 FOR J=0 TO DS-1:PRINT#1,NE$(0,J);:FOR L=1 TO ITEM
2250 PRINT#1,",";NE$(L,J);
2260 NEXT L:PRINT#1:NEXT J:CLOSE #1:GOSUB *MOUSEON:RETURN
2270 'キー入力用ルーチン++++++++++++++++++++++++++++++++++++++++++++
2280 *キーボード入力
2290 IF MOUSE(0)>=150 AND MOUSE(0)<=600 THEN
2300 FOR L=0 TO ITEM
2310 IF MOUSE(2,0)<>0 THEN
2320 IF MOUSE(1)>=75+L*20 AND MOUSE(1)<=95+L*20 THEN
2330 LINE(150,75+L*20)-(600,95+L*20),PSET,0,BF,5
2340 SYMBOL(155,77+L*20),"キーボードから項目を入力して下さい。",1,1,2
2350 GOSUB *MOUSEOFF:WW$=NE$(L,WDS)
2360 LOCATE 0,25:INPUT NE$(L,WDS):CLS 4
2370 IF NE$(L,WDS)="" THEN NE$(L,WDS)=WW$
2380 IF NE$(L,WDS)="CLS" OR NE$(L,WDS)="cls" THEN NE$(L,WDS)=""
2390 LINE(150,75+L*20)-(600,95+L*20),PSET,0,BF,5
2400 SYMBOL(155,78+L*20),NE$(L,WDS),1,1,0
2410 GOSUB *MOUSEON
2420 ENDIF
2430 ENDIF
2440 NEXT
2450 ENDIF
2460 RETURN
2470 *DATA2:DATA " 戻る",決定
2480 DATA 名字(フリガナ),名字(漢字),名前(フリガナ),名前(漢字)
2490 DATA 郵便番号,住所,電話番号,備考
2500 DATA "●それぞれの項目をマウスで選んで下さい。",""
2510 DATA "●メッセージの表示されている間はキーボードから文字を入力"
2520 DATA " して下さい。",""
2530 DATA "●間違って項目を選んでしまっても、何も入力せずにリターン"
2540 DATA " キーを押すと、前に入力されていた項目は消えません。",""
2550 DATA "●項目の文字を消去したい場合は 「CLS」 と入力して下さい。"
2560 '判別ルーチン-----------------------------------
2570 *正か否か:GOSUB *画面に線:GOSUB *MOUSEON
2580 LINE(100,100)-(539,379),PSET,0,BF,7:RESTORE *DATA8
2590 FOR M=0 TO 2:READ A$:SYMBOL(150,145+M*30),A$,1,1,0:NEXT
2600 SYMBOL(180,240),"フリガナ = "+NE$(0,O)+" "+NE$(2,O),1,1,1
2610 SYMBOL(180,260),"名前 = "+NE$(1,O)+" "+NE$(3,O),1,1,1
2620 SYMBOL(180,280),"電話番号 = "+NE$(6,O),1,1,1:GOSUB *正否判定:RETURN
2630 *正否判定:X1=180:X2=280:Y1=320:Y2=350:Y3=170:XY=1:FOR P=0 TO 1:IK=P
2640 LINE(X1+P*Y3,Y1)-(X2+P*Y3,Y2),PSET,0,BF,P+1:GOSUB *影付
2650 READ A$:SYMBOL(X1+30+P*Y3,Y1+7),A$,1,1,7,,,9:NEXT
2660 FLG00=0:KAKU=0:WHILE FLG00=0
2670 IF MOUSE(2,0)<>0 THEN
2680 IF MOUSE(1)>=320 AND MOUSE(1)<=350 THEN
2690 IF MOUSE(0)>=180 AND MOUSE(0)<=280 THEN KAKU=1:FLG00=1
2700 IF MOUSE(0)>=350 AND MOUSE(0)<=450 THEN FLG00=1
2710 ENDIF
2720 ENDIF
2730 WEND:FLG00=0:RETURN
2740 *DATA8:DATA 入力項目に同じデータが確認されました。
2750 DATA このままだと同じデータが二つ出来てしまいます
2760 DATA 二つデータが出来てもよろしいですか。
2770 DATA いいえ,はい
2780 *モード選択:RESTORE *DATA5:LINE(0,0)-(639,479),PSET,7,BF
2790 LINE(50,30)-(589,50),PSET,3,BF:READ A$:SYMBOL(200,20),A$,2,2,6,,,9,3
2800 X1=200:X2=439:Y1=150:Y2=180:Y3=100:XY=0:FOR J=0 TO 2:IK=J
2810 LINE(X1,Y1+J*Y3)-(X2,Y2+J*Y3),PSET,0,BF,5:GOSUB *影付
2820 READ A$:SYMBOL(240,158+J*100),A$,1,1,0:NEXT
2830 SYMBOL(200,400),"検索モードを選んで下さい。",1,1,0:RETURN
2840 *出:GOSUB *モード選択:FLG6=0:WHILE FLG6=0
2850 IF MOUSE(0)>=200 AND MOUSE(0)<=439 THEN
2860 IF MOUSE(2,0)<>0 THEN
2870 IF MOUSE(1)>=150 AND MOUSE(1)<=180 THEN GOSUB *検
2880 ENDIF
2890 IF MOUSE(2,0)<>0 THEN
2900 IF MOUSE(1)>=250 AND MOUSE(1)<=280 THEN GOSUB *入検
2910 ENDIF
2920 IF MOUSE(1)>=350 AND MOUSE(1)<=380 AND MOUSE(2,0)<>0 THEN FLG6=1
2930 ENDIF
2940 WEND:GOSUB *タイトル:RETURN
2950 *DATA5:DATA 検索モード選択,一覧表示モード,入力検索モード," 戻る"
2960 '入力語検索モード+++++++++++++++++++++++++++++++++++++++
2970 *入検:IWRD$="":GOSUB *入検画面
2980 FLG7=0:WHILE FLG7=0
2990 IF MOUSE(2,0)<>0 AND MOUSE(1)>=350 AND MOUSE(1)<=380 THEN
3000 IF MOUSE(0)>=100 AND MOUSE(0)<=200 THEN FLG7=1
3010 IF MOUSE(0)>=270 AND MOUSE(0)<=370 THEN
3020 LINE(100,120)-(539,150),PSET,0,BF,5:GOSUB *MOUSEOFF
3030 SYMBOL(110,125),"キーボードから単語を入力して下さい",1,1,2,,,1
3040 WW$=IWRD$:LOCATE 0,25:INPUT IWRD$:CLS 4
3050 IF IWRD$="" THEN IWRD$=WW$
3060 IF IWRD$="CLS" OR IWRD$="cls" THEN IWRD$=""
3070 LINE(100,120)-(539,150),PSET,0,BF,5:SYMBOL(110,125),IWRD$,1,1,0
3080 GOSUB *MOUSEON
3090 ENDIF
3100 IF MOUSE(0)>=440 AND MOUSE(0)<=540 THEN
3110 IF IWRD$="" OR IWRD$="*" OR IWRD$="*" THEN
3120 LINE(0,350)-(639,430),PSET,7,BF:BEEP
3130 SYMBOL(200,400),"検索する単語を入力して下さい",1,1,1
3140 GOSUB *確認:IWRD$="":GOSUB *入検画面
3150 ELSE
3160 GOSUB *MOUSEOFF
3170 SYMBOL(280,462),"データ検索中",1,1,6
3180 MD3=0:MATTI=0
3190 'アスタリスクの有無を調べる======================
3200 IF KMID$(IWRD$,1,1)="*" OR KMID$(IWRD$,1,1)="*" THEN
3210 MD3=1:IWRD$=KMID$(IWRD$,2,KLEN(IWRD$)-1)
3220 ENDIF
3230 FOR I=0 TO DS-1:W1$="":MD4=0:FOR J=0 TO ITEM
3240 'アスタリスクの有無を調べる======================
3250 IF MD3=0 THEN
3260 W2$=NE$(J,I)
3270 IF W2$=IWRD$ AND W1$<>W2$ THEN
3280 WS(MATTI)=I:MATTI=MATTI+1:W1$=W2$:MD4=1
3290 ENDIF
3300 ELSE
3310 FOR K=1 TO KLEN(NE$(J,I))-KLEN(IWRD$)+1
3320 W2$=KMID$(NE$(J,I),K,KLEN(IWRD$))
3330 IF W2$=IWRD$ AND W1$<>W2$ THEN
3340 WS(MATTI)=I:MATTI=MATTI+1:W1$=W2$:MD4=1
3350 ENDIF
3360 NEXT K
3370 ENDIF
3380 NEXT J
3390 IF MD4=0 THEN
3400 A1$=NE$(0,I)+NE$(2,I):A2$=NE$(1,I)+NE$(3,I)
3410 IF A1$=IWRD$ OR A2$=IWRD$ THEN WS(MATTI)=I:MATTI=MATTI+1:MD4=0
3420 ENDIF
3430 NEXT I:LINE(0,455)-(639,479),PSET,0,BF
3440 IF MATTI>0 THEN
3450 LINE(0,350)-(639,430),PSET,7,BF
3460 SYMBOL(200,400),STR$(MATTI)+"件のデータがあります。",1,1,0
3470 GOSUB *MOUSEON:GOSUB *確認:WPC=0:MN=0:MD2=1
3480 FLG11=0:Q=0:WHILE FLG11=0:I=WS(Q):GOSUB *個人データ
3490 Q=Q+1:IF Q>=MATTI OR FLG10=1 THEN FLG11=1
3500 WEND:GOSUB *入検画面:IWRD$=""
3510 ELSE
3520 GOSUB *MOUSEON:GOSUB *検索データなし
3530 ENDIF
3540 ENDIF
3550 ENDIF
3560 ENDIF
3570 WEND
3580 GOSUB *モード選択:RETURN
3590 *検索データなし
3600 LINE(0,350)-(639,430),PSET,7,BF:BEEP
3610 SYMBOL(200,400),"検索データが見つかりません。",1,1,2:GOSUB *確認
3620 IWRD$="":GOSUB *入検画面
3630 RETURN
3640 *確認
3650 X1=500:X2=550:Y1=400:Y2=430:Y3=0:XY=1
3660 LINE(X1,Y1)-(X2,Y2),PSET,0,BF,6:GOSUB *影付
3670 SYMBOL(X1+9,Y1+7),"確認",1,1,0
3680 FLG00=0:WHILE FLG00=0
3690 IF MOUSE(2,0)<>0 THEN
3700 IF MOUSE(0)>=X1 AND MOUSE(0)<=X2 THEN
3710 IF MOUSE(1)>=Y1 AND MOUSE(1)<=Y2 THEN FLG00=1
3720 ENDIF
3730 ENDIF
3740 WEND:FLG00=0
3750 RETURN
3760 *入検画面:RESTORE *DATA6:LINE(0,0)-(639,454),PSET,7,BF
3770 LINE(50,30)-(589,50),PSET,5,BF:LINE(0,455)-(639,479),PSET,0,BF
3780 SYMBOL(200,20),"入力検索モード",2,2,4,,,9,8
3790 X1=100:X2=200:Y1=350:Y2=380:Y3=170:XY=1:FOR I=0 TO 2:IK=I
3800 LINE(X1+I*Y3,Y1)-(X2+I*Y3,Y2),PSET,0,BF,3:GOSUB *影付
3810 READ A$:SYMBOL(X1+20+I*Y3,Y1+8),A$,1,1,7:NEXT
3820 SYMBOL(100,100),"入力単語",1,1,0,,,1
3830 LINE(100,120)-(539,150),PSET,0,BF,5
3840 FOR Q=0 TO 8:READ A$:SYMBOL(100,165+Q*20),A$,1,1,0:NEXT
3850 RETURN
3860 *DATA6:DATA " 戻る",単語入力,検索開始
3870 DATA ●単語を入力すると、その単語の項目のあるデータをすべて
3880 DATA " 表示します。",""
3890 DATA ●単語の先頭に *(アスタリスク)を付けると、その単語を
3900 DATA " 含む、すべての項目に対して検索を行います。",""
3910 DATA 例:*あいう
3920 DATA " 上記のように入力すると「あいう」の文字の入ったデータが"
3930 DATA " 順番に表示されていきます。"
3940 '検索モード+++++++++++++++++++++++++++++++++++++++++++++
3950 *検:PC=1:GOSUB *検索データ表示
3960 FLG2=0:WHILE FLG2=0
3970 IF MOUSE(2,0)<>0 THEN
3980 IF MOUSE(1)>=460 AND MOUSE(1)<=479 THEN
3990 '戻るの処理...........................
4000 IF MOUSE(0)>=300 AND MOUSE(0)<=380 THEN FLG2=1
4010 'ページ指定の処理...........................
4020 IF MOUSE(0)>=530 AND MOUSE(0)<=620 THEN GOSUB *ページ指定
4030 '前頁の処理...........................
4040 IF MOUSE(0)>=200 AND MOUSE(0)<=280 AND PC>1 THEN
4050 PC=PC-1:GOSUB *検索データ表示
4060 ENDIF
4070 '後頁の処理...........................
4080 IF MOUSE(0)>=400 AND MOUSE(0)<=480 AND PC<TPC THEN
4090 IF MOUSE(2,0)<>0 THEN PC=PC+1:GOSUB *検索データ表示
4100 ENDIF
4110 ENDIF
4120 ENDIF
4130 '個人の処理...........................
4140 IF MOUSE(2,0)<>0 THEN
4150 FOR I=0 TO 21
4160 IF (I+WPC)<DS THEN
4170 IF MOUSE(1)>20+I*20 AND MOUSE(1)<40+I*20 THEN
4180 MD2=0:GOSUB *個人データ:GOSUB *検索データ表示
4190 ENDIF
4200 ENDIF
4210 NEXT
4220 ENDIF
4230 WEND:GOSUB *モード選択:RETURN
4240 'ページ指定用ルーチン+++++++++++++++++++++++++++++++++++
4250 *ページ指定表示:GOSUB *MOUSEOFF
4260 LINE(0,455)-(639,479),PSET,0,BF:LINE(100,150)-(539,329),PSET,0,BF,7
4270 SYMBOL(160,180),"何ページを表示しますか?",1,1,0
4280 SYMBOL(160,210),"数字をキーボードから入力して下さい。",1,1,1
4290 SYMBOL(160,240),"現在のページ = "+STR$(PC),1,1,6,,,9:INPC$=""
4300 SYMBOL(160,270),"総ページ数 = "+STR$(TPC),1,1,4,,,9:RETURN
4310 *ページ指定:GOSUB *ページ指定表示
4320 LOCATE 0,25:INPUT INPC$:CLS 4
4330 IF INPC$="" THEN
4340 INPC$=STR$(PC)
4350 ELSE
4360 IF VAL(INPC$)<1 THEN INPC$=STR$(1)
4370 IF VAL(INPC$)>TPC THEN INPC$=STR$(TPC)
4380 ENDIF
4390 GOSUB *MOUSEON:PC=VAL(INPC$):GOSUB *検索データ表示
4400 RETURN
4410 '検索データ表示用ルーチン+++++++++++++++++++++++++++++++
4420 *検索データ表示:RESTORE *DATA3
4430 LINE(0,0)-(639,479),PSET,7,BF
4440 LINE(0,20)-(30,459),PSET,6,BF:LINE(30,0)-(639,20),PSET,5,BF
4450 IF DS<23 THEN LP=DS-1:TPC=1 ELSE LP=21:TPC=INT((DS-1)/22)+1
4460 FOR I=0 TO 23:LINE(0,I*20)-(639,I*20),PSET,0
4470 IF I>0 AND I<23 THEN
4480 KJIN=(PC-1)*22+I
4490 IF KJIN<10 THEN KOJINNO$=" "+STR$(KJIN)
4500 IF KJIN<100 AND KJIN>=10 THEN KOJINNO$=STR$(KJIN)
4510 IF KJIN<1000 AND KJIN>=100 THEN KOJINNO$=MID$(STR$(KJIN),2,3)
4520 IF KJIN>=1000 THEN KOJINNO$="#"+RIGHT$(STR$(KJIN),2)
4530 SYMBOL(0,2+I*20),KOJINNO$,1,1,0,,,1
4540 ENDIF
4550 NEXT:FOR I=0 TO 3:READ X:LINE(X,0)-(X,459),PSET,0:NEXT
4560 FOR I=0 TO 3:READ X,A$:SYMBOL(X,2),A$,1,1,0:NEXT
4570 X1=200:X2=280:Y1=460:Y2=479:Y3=100:XY=1:FOR I=0 TO 2:IK=I
4580 LINE(X1+I*Y3,Y1)-(X2+I*Y3,Y2),PSET,0,BF,4:GOSUB *影付
4590 READ A$:SYMBOL(210+I*100,462),A$,1,1,7,,,9:NEXT
4600 X1=530:X2=620:Y1=460:Y2=479:Y3=0:XY=0
4610 LINE(X1,Y1)-(X2,Y2),PSET,0,BF,7:GOSUB *影付
4620 SYMBOL(0,462),"データ件数・・"+STR$(DS)+"件",1,1,2,,,1
4630 SYMBOL(535,462),STR$(PC)+"/"+STR$(TPC)+"頁",1,1,1,,,1:WPC=(PC-1)*22
4640 FOR I=0 TO LP
4650 IF WPC+I<DS THEN
4660 SYMBOL(32,22+I*20),NE$(1,I+WPC)+" "+NE$(3,I+WPC),1,1,0
4670 SYMBOL(152,22+I*20),NE$(0,I+WPC)+" "+NE$(2,I+WPC),1,1,0
4680 SYMBOL(270,22+I*20),NE$(4,I+WPC),1,1,0
4690 SYMBOL(350,22+I*20),NE$(5,I+WPC),1,1,0
4700 ENDIF
4710 NEXT:RETURN
4720 *DATA3:DATA 30,150,265,340
4730 DATA 70,名前,165,読み仮名,270,郵便番号,360,住所
4740 DATA 前の頁へ," 戻る",次の頁へ
4750 '個人データ表示用ルーチン+++++++++++++++++++++++++++++++++++++
4760 *個人データ表示:RESTORE *DATA4:IF MDD=0 THEN MN=MN+1
4770 LINE(0,0)-(639,479),PSET,7,BF:LINE(0,50)-(80,110),PSET,4,BF
4780 FOR J=0 TO 2:LINE(0,110+J*60)-(639,140+J*60),PSET,5,BF:NEXT
4790 SYMBOL(160,10),"*個人データ*",2,1.5!,2,,,9,10
4800 LINE(80,50)-(80,110),PSET,0
4810 FOR J=0 TO 2:LINE(0,50+J*30)-(639,50+J*30),PSET,0:NEXT
4820 FOR J=0 TO 5:LINE(0,140+J*30)-(639,140+J*30),PSET,0:NEXT
4830 IF MD2=1 AND MATTI>1 THEN
4840 SYMBOL(20,450),STR$(Q+1)+"/"+STR$(MATTI)+"頁",1,1,1,,,1
4850 ENDIF
4860 FOR J=0 TO 1:READ A$:SYMBOL(10,57+J*30),A$,1,1,0,,,1:NEXT
4870 FOR J=0 TO 2:READ A$:SYMBOL(200,115+J*60),A$,1,1,1,,,1:NEXT
4880 X1=240:X2=370:Y1=330:Y2=355:Y3=0:XY=1:LINE(X1,Y1)-(X2,Y2),PSET,0,BF,2
4890 GOSUB *影付:SYMBOL(280,335),"音声",1,1,7,,,9,20
4900 X1=80:X2=170:Y1=400:Y2=425:Y3=120:XY=1:FOR J=0 TO 3:IK=J
4910 LINE(X1+J*Y3,Y1)-(X2+J*Y3,Y2),PSET,0,BF,6:GOSUB *影付:READ A$
4920 IF A$="戻る" AND MD2=1 AND MN<MATTI THEN
4930 A$="次頁":X1=320:X2=410:Y1=440:Y2=465:Y3=0:XY=1
4940 LINE(X1,Y1)-(X2,Y2),PSET,0,BF,2:GOSUB *影付
4950 SYMBOL(340,445),"中止",1,1,7,,,9,20
4960 ENDIF
4970 SYMBOL(100+J*120,405),A$,1,1,7,,,9,20:NEXT
4980 FOR J=0 TO 1:FOR K=0 TO 1
4990 SYMBOL(230+J*100,57+K*30),NE$(0+K+J*2,I+WPC),1,1,0:NEXT K,J
5000 SYMBOL(60,147),"〒"+NE$(4,I+WPC)+" "+NE$(5,I+WPC),1,1,0
5010 FOR J=0 TO 1:SYMBOL(60,207+J*60),NE$(6+J,I+WPC),1,1,0:NEXT
5020 RETURN
5030 *個人データ:MDD=0:GOSUB *個人データ表示:MDD=1
5040 FLG5=0:WHILE FLG5=0
5050 '音声関連+++++++++++++
5060 IF MOUSE(1)>=330 AND MOUSE(1)<=355 AND MOUSE(2,0)<>0 THEN
5070 IF MOUSE(0)>=240 AND MOUSE(0)<=370 THEN
5080 LINE(0,330)-(639,479),PSET,7,BF
5090 IF NE$(6,I+WPC)="" THEN
5100 SYMBOL(200,400),"電話番号がありません。",1,1,0
5110 BEEP:GOSUB *確認:GOSUB *個人データ表示
5120 ELSE
5130 SYMBOL(200,370),"再生中・・・・",2,2,3,,,1
5140 TELFLG=0:LPM=1:GOSUB *MOUSEOFF:WHILE TELFLG=0
5150 LOAD@ KMID$(NE$(6,I+WPC),LPM,1)+".SND",SND%
5160 PCMPLAY SND%,127:WHILE PLAY(2):WEND:LPM=LPM+1
5170 IF KLEN(NE$(6,I+WPC))<LPM THEN TELFLG=1
5180 WEND
5190 LINE(0,330)-(639,479),PSET,7,BF
5200 SYMBOL(200,370),"再生終了",2,2,3,,,1
5210 GOSUB *MOUSEON:GOSUB *確認:GOSUB *個人データ表示
5220 ENDIF
5230 ENDIF
5240 ENDIF
5250 '戻る関連+++++++++++++
5260 IF MOUSE(1)>=440 AND MOUSE(1)<=465 AND MN<MATTI THEN
5270 IF MOUSE(0)>=320 AND MOUSE(0)<=410 AND MOUSE(2,0)<>0 THEN
5280 FLG5=1:IF MD2=1 THEN FLG10=1
5290 ENDIF
5300 ENDIF
5310 IF MOUSE(1)>=400 AND MOUSE(1)<=425 AND MOUSE(2,0)<>0 THEN
5320 IF MOUSE(0)>=440 AND MOUSE(0)<=530 THEN FLG5=1:IF MD2=1 THEN FLG10=0
5330 IF MOUSE(0)>=320 AND MOUSE(0)<=410 THEN
5340 LINE(0,330)-(639,479),PSET,7,BF:LPRINT;
5350 IF PR=0 THEN
5360 GOSUB *MOUSEOFF
5370 SYMBOL(200,370),"印刷中・・・",2,2,0
5380 LPRINT"**個人データ***********************************"
5390 LPRINT USING "フリガナ & & & &";NE$(0,I+WPC);NE$(2,I+WPC)
5400 IF KLEN(NE$(1,I+WPC))<5 THEN
5410 LPRINT USING "氏名 & & & &";NE$(1,I+WPC);NE$(3,I+WPC)
5420 ELSE
5430 LPRINT USING "氏名 @ @";NE$(1,I+WPC);NE$(3,I+WPC)
5440 ENDIF
5450 LPRINT:LPRINT "〒 ";NE$(4,I+WPC);" ";NE$(5,I+WPC)
5460 LPRINT "電話 ";NE$(6,I+WPC)
5470 LPRINT "備考 ";
5480 IF NE$(7,I+WPC)="" THEN LPRINT"特に無し" ELSE LPRINT NE$(7,I+WPC)
5490 LINE(0,330)-(639,479),PSET,7,BF:LPRINT
5500 SYMBOL(200,370),"印刷終了",2,2,0:GOSUB *MOUSEON
5510 GOSUB *確認:GOSUB *個人データ表示
5520 ELSE
5530 BEEP:SYMBOL(170,440),"プリンターの準備が出来ていません。",1,1,2
5540 GOSUB *確認:GOSUB *個人データ表示:PR=0
5550 ENDIF
5560 ENDIF
5570 IF MOUSE(0)>=200 AND MOUSE(0)<=290 AND MOUSE(2,0)<>0 THEN
5580 GOSUB *画面に線:GOSUB *MOUSEON:BEEP
5590 LINE(100,100)-(539,379),PSET,0,BF,7:RESTORE *削除用データ
5600 FOR M=0 TO 1:READ A$:SYMBOL(150,145+M*30),A$,1,1,0:NEXT
5610 SYMBOL(180,220),"フリガナ = "+NE$(0,I+WPC)+" "+NE$(2,I+WPC),1,1,1
5620 SYMBOL(180,250),"名前 = "+NE$(1,I+WPC)+" "+NE$(3,I+WPC),1,1,1
5630 SYMBOL(180,280),"電話番号 = "+NE$(6,I+WPC),1,1,1:GOSUB *正否判定
5640 IF KAKU=0 THEN
5650 FOR J=I+WPC TO DS:FOR K=0 TO ITEM
5660 NE$(K,J)=NE$(K,J+1)
5670 NEXT K,J:DS=DS-1
5680 FLG5=1
5690 ELSE
5700 GOSUB *個人データ表示
5710 ENDIF
5720 ENDIF
5730 IF MOUSE(0)>=80 AND MOUSE(0)<=170 AND MOUSE(2,0)<>0 THEN
5740 MD=1:WDS=I+WPC:T$="個人データ修正"
5750 GOSUB *登更:GOSUB *個人データ表示
5760 ENDIF
5770 ENDIF
5780 WEND:RETURN
5790 *DATA4:DATA フリガナ,氏名,住所,電話番号,備考
5800 DATA 修正,削除,印刷,戻る
5810 *削除用データ:DATA 削除するとこのデータは無くなってしまいます。
5820 DATA 本当に削除しますか?,中止,削除
5830 *画面に線:GOSUB *MOUSEOFF
5840 FOR GSEN=0 TO 159:LINE(0,1+GSEN*4)-(639,1+GSEN*4),PSET,0
5850 LINE(0,479-GSEN*4)-(639,479-GSEN*4),PSET,0:NEXT
5860 FOR GSEN=0 TO 159:LINE(1+GSEN*4,0)-(1+GSEN*4,479),PSET,0
5870 LINE(639-GSEN*4,0)-(639-GSEN*4,479),PSET,0:NEXT:RETURN
5880 'エラールーチン+++++++++++++++++++++++++++++++++++++++++++++++++++
5890 *ERROR_RT
5900 IF ERR=53 AND ERL=5340 THEN PR=1:RESUME 5350
5910 IF ERR=53 AND ERL<>5340 THEN
5920 LINE(0,350)-(639,479),PSET,7,BF:BEEP
5930 SYMBOL(170,440),"用紙が切れています。",1,1,2:GOSUB *MOUSEON
5940 RESUME 5510
5950 ENDIF
5960 IF ERR=63 AND ERL=200 THEN OPN=1:RESUME 190
5970 IF ERL=2230 THEN
5980 LINE(100,150)-(539,329),PSET,0,BF,7:SYMBOL(110,180),"警告:",1,1,2
5990 IF ERR=72 THEN
6000 SYMBOL(160,180),"ディスクが使用可能な状態になっていません!!",1,1,2
6010 SYMBOL(160,210),"フロッピーディスクがちゃんと入っていますか?",1,1,1
6020 SYMBOL(160,240),"ハードディスクの電源が切れていませんか?",1,1,1
6030 ENDIF
6040 IF ERR=73 THEN
6050 SYMBOL(160,180),"ディスクが書き込み禁止になっています!!",1,1,2
6060 SYMBOL(160,210),"フロッピーディスクなら書き込み可能な",1,1,1
6070 SYMBOL(160,240),"状態にしてください。",1,1,1
6080 ENDIF
6090 SYMBOL(160,280),"ディスクを確認して下さい。",1,1,2
6100 BEEP:GOSUB *MOUSEON:GOSUB *確認:GOSUB *MOUSEOFF:RESUME 2230
6110 ENDIF
6120 IF ERR=73 AND ERL=310 THEN
6130 SYMBOL(100,360),"警告:",1,1,2
6140 SYMBOL(150,360),"ディスクが書き込み禁止になっています!!",1,1,2
6150 SYMBOL(150,380),"フロッピーディスクなら書き込み可能な",1,1,1
6160 SYMBOL(150,400),"状態にしてください。",1,1,1
6170 SYMBOL(150,420),"ディスクを確認して下さい。",1,1,2
6180 BEEP:MOUSE 1,320,240,1:GOSUB *確認:GOSUB *MOUSEOFF
6190 LINE(0,350)-(639,479),PSET,7,BF:RESUME 310
6200 ENDIF
6210 IF ERR=72 AND ERL=200 THEN
6220 SYMBOL(100,360),"警告:",1,1,2
6230 SYMBOL(150,360),"ディスクが使用可能な状態になっていません!!",1,1,2
6240 SYMBOL(150,380),"フロッピーディスクがちゃんと入っていますか?",1,1,1
6250 SYMBOL(150,400),"ハードディスクの電源が切れていませんか?",1,1,1
6260 SYMBOL(150,420),"ディスクを確認して下さい。",1,1,2
6270 BEEP:MOUSE 1,320,240,1:GOSUB *確認:GOSUB *MOUSEOFF
6280 LINE(0,350)-(639,479),PSET,7,BF:RESUME 200
6290 ENDIF
6300 IF ERL=5150 THEN
6310 LPM=LPM+1:WAIT 80:RESUME 5170
6320 ENDIF
6330 GOSUB *画面に線:GOSUB *MOUSEON
6340 LINE(200,190)-(439,289),PSET,0,BF,7:BEEP
6350 EE=0:ERMS$="エラー番号 "+STR$(ERR)
6360 ERLINE$="エラー行 "+STR$(ERL)+"行目"
6370 IF ERR=2 THEN ERMS$="文法にミスがあります。":EE=1
6380 IF ERR=63 AND ERL=130 THEN ERMS$="コンフィグファイルが見つかりません。":EE=1
6390 IF ERR=83 THEN ERMS$="メモリが足りません。":EE=1
6400 IF EE=1 THEN ERLINE$="確認して下さい。"
6410 SYMBOL(260,200),"エラー発生!!",1,1,2,,,1
6420 SYMBOL(220,230),ERMS$,1,1,1
6430 SYMBOL(220,260),ERLINE$,1,1,0
6440 GOSUB *確認:MOUSE 5:END